Communication over a Universal Serial Bus (USB) typically occurs between a host and a peripheral device. Many peripheral devices support multiple endpoints, where each endpoint can exchange data with the host over the USB. The peripheral devices include multiple buffers to store endpoint data received over the USB from the host and store endpoint data to be transmitted over the USB to the host. Each endpoint is dedicated one of the buffers and the peripheral devices typically service the buffers in a FIFO manner.
Although this memory system implementation allows endpoint data to be exchanged with the host, any increase in the number of endpoints supported by the peripheral device requires a corresponding increase in the number of endpoint-dedicated buffers. In other words, the memory system is not easily scalable without adding memory buffers, which can increase the size and the cost of the peripheral device.